O7889(CAP 0-180 TOOLING BALL)
(ABSOLUTE SURFACING MACRO)
(START OF TANGENT/ TOP OF PART)
(END OF TANGENT/ SHANK DIAMETER)
(UNPROVEN)

(FORMAT G65/G66 CDTWSRZEF)
(C = #3 - CUSP HEIGHT/ DEG. OF ROTATION) 
(D = #7 - TOOL DIAMETER)
(T = #20 - TOOL RADIUS/ BALL OR BULL)
(W = #23 - KEYWAY CUTTER WIDTH)
(S = #19 - TOOLING BALL DIAMETER)
(R = #18 - R PLANE) 
(Z = #26 - Z START ZERO)
(E = #8 - DIAMETER AT END OF SWING)
(RANGES = 90-180 )
(F = #9 FEEDRATE)
(******************************) 
(TOPSIDE)
#100=0
#101=[#19/2]+#20
#102=#3
IF[#102GT15.]THEN#102=15.
#102=ROUND[90./#102]
#102=90./#102
#103=#5001
#104=[#103-.1]-[[#7/2]+[#19/2]]
#105=#5002
#113=#105
#115=[#105+.1]+[[#7/2]+[#19/2]]
#145=0
IF[#7EQ[#20*2]]GOTO1
#105=#105+[[#7/2]-#20]
#145=#145+[[#7/2]-#20]
N1G0G90X#104Y#115
Z[#26+.1]
G1Z#26F#9
#106=#5003-#101
WHILE[#100LE90.]DO1
IF[#100GT90.]GOTO100
#107=#105+[SIN[#100]*[#101]]
#147=#145+[SIN[#100]*[#101]]
#108=#106+[COS[#100]*[#101]]
#100=#100+#102
G1Z#108F#9
G41Y#107
X#103
G02J-#147
G03X[#103+.1]Y[#107+.1]J.1F[#9/2]
G0G40X#104
END1
N100
(KEY CUTTER SHIFT)
IF[#23EQ[#20*2]]GOTO20
#106=#108-[#23-[#20*2]]
N20(CALCULATE END ANGLE)
IF[#23EQ[#20*2]THEN#106=#108
#130=ASIN[#8/2]/[#19/2]
#130=90.-#130
(UNDERSIDE)
#100=0
#102=#3
IF[#102GT15.]THEN#102=15.
#102=ROUND[#130/#102]
#102=[#130/#102]
WHILE[#100LT#130]DO1
IF[#100GT#130]GOTO200
#107=#105+[COS[#100]*[#101]]
#147=#145+[COS[#100]*[#101]]
#108=#106-[SIN[#100]*[#101]]
#100=#100+#102
G1Z#108F#9
G41Y#107
X#103
G02J-#147
G03X[#103+.1]Y[#107+.1]J.1F[#9/2]
G0G40X#104
END1
N200G0G90Z#18
X#103Y#113
M99